package study3;

//                             代理设计模式
// 业务接口，你要干的事儿，你要买的东西
interface ISubject {
    // 买电脑是我们的核心业务
    void buyComputer();
}
// 真实业务类，真正付钱买电脑的那个人
class RealSubject implements ISubject {
    @Override
    public void buyComputer() {
        System.out.println("买个mac pro 15寸顶配，真香~");
    }
}
// 代理类，赋值我们买电脑
// 代理类中有买电脑的·辅助操作
class ProxySubject implements ISubject {
    private ISubject realSubject;
    public ProxySubject(ISubject subject) {
        this.realSubject = subject;
    }
    public void preHandle() {
        System.out.println("买飞机票去代购");
    }
    @Override
    public void buyComputer() {
        preHandle();
        // 付钱这个操作是由真实业务来处理的
        this.realSubject.buyComputer();
        postHandle();
    }
    public void postHandle() {
        System.out.println("再买飞机票回国，送上14+7大礼包(隔离)~~");
    }
}

// 最终通过平台，将代理人和客户建立联系
class Platform {
    public static ISubject getInstance() {
        // 在代购平台上下单
        return new ProxySubject(new RealSubject());
    }
}

public class Subject {
    public static void main(String[] args) {
        ISubject subject = Platform.getInstance();
        subject.buyComputer();
    }
}